/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.trandio.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.NamingException;
import org.trandio.model.GrupoactVO;
import org.trandio.model.PrestadorVO;
import org.trandio.util.ConexionDb;

/**
 *
 * @author root
 */
public class PrestadorDAO implements PrestadorInterface {

    @Override
    public List<PrestadorVO> consultarPrestador(String codigo, String descripcion, int firstRow, int rowsPerPage, String sortField, boolean sortAscending) throws SQLException, NamingException {

        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();
        String condicion = "";

        if (codigo != null) {
            if (!codigo.equals("")) {
                condicion = " WHERE tb_prestador.codigo = '" + codigo + "'";
            }
        }

        if (descripcion != null) {
            if (!descripcion.equals("")) {
                condicion = " WHERE tb_prestador.razon_social like '%" + descripcion + "%'";
            }
        }

        List<PrestadorVO> listPrestadorVO = new ArrayList<PrestadorVO>();
        String sql = "SELECT "
                + "tb_prestador.id,"
                + "tb_prestador.codigo,"
                + "tb_prestador.razon_social"
                + " FROM tb_prestador " + condicion + " LIMIT " + rowsPerPage + " OFFSET " + firstRow;

        System.out.println("Sql BUSCAR tb_prestador: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PrestadorVO prestadorVO = new PrestadorVO();
                    prestadorVO.setId(res.getInt("id"));
                    prestadorVO.setCodigo(res.getString("codigo"));
                    prestadorVO.setRazonSocial(res.getString("razon_social"));
                    listPrestadorVO.add(prestadorVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return listPrestadorVO;
    }

    @Override
    public List<PrestadorVO> consultarPrestador(String codigo, String descripcion) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String condicion = "";


        if (codigo != null) {
            if (!codigo.equals("")) {
                condicion = " WHERE tb_prestador.codigo = '" + codigo + "'";
            }
        }

        if (descripcion != null) {
            if (!descripcion.equals("")) {
                condicion = " WHERE tb_prestador.razon_social like '%" + descripcion + "%'";
            }
        }


        List<PrestadorVO> listPrestadorVO = new ArrayList<PrestadorVO>();
        String sql = "SELECT "
                + "tb_prestador.id,"
                + "tb_prestador.codigo,"
                + "tb_prestador.razon_social"
                + " FROM tb_prestador " + condicion;

        System.out.println("Sql BUSCAR tb_prestador: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PrestadorVO prestadorVO = new PrestadorVO();
                    prestadorVO.setId(res.getInt("id"));
                    prestadorVO.setCodigo(res.getString("codigo"));
                    prestadorVO.setRazonSocial(res.getString("razon_social"));
                    listPrestadorVO.add(prestadorVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return listPrestadorVO;
    }

    @Override
    public int count() throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();
        int count = 0;

        String sql = "SELECT count(*) FROM tb_prestador";

        PreparedStatement stmt = conn.prepareStatement(sql);
        ResultSet res = stmt.executeQuery();
        if (res.next()) {
            count = res.getInt(1);
        }
        return count;
    }

    @Override
    public PrestadorVO getPrestador(int id) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();      
        
        String sql = "SELECT id, codigo, razon_social, id_tipoidentificacion, "
                +" numeroidentificacion, nit, digitoverificacion, nivel, "
                +" codigohabilitacion, id_municipio, direccion, telefono, email, logo "
                +" FROM tb_prestador "
                +" WHERE tb_prestador.id =" + id;

        System.out.println("Sql buacar grupoact ID: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        PrestadorVO prestadorVO = new PrestadorVO();
        try {
            ResultSet res = stmt.executeQuery();
            try {

                if (res.next()) {
                    prestadorVO.setId(res.getInt("id"));
                    prestadorVO.setCodigo(res.getString("codigo"));
                    prestadorVO.setRazonSocial(res.getString("razon_social"));
                    prestadorVO.setIdTipoIdentificacion(res.getInt("id_tipoidentificacion"));               
                    prestadorVO.setNumeroIdentificacion(res.getInt("numeroidentificacion"));
                    prestadorVO.setNit(res.getInt("nit"));
                    prestadorVO.setDigitoVerificacion(res.getInt("digitoverificacion"));
                    prestadorVO.setNivel(res.getInt("nivel"));
                    prestadorVO.setCodigoHabilitacion(res.getString("codigohabilitacion"));
                    prestadorVO.setIdMunicipio(res.getInt("id_municipio"));
                    prestadorVO.setDireccion(res.getString("direccion"));
                    prestadorVO.setTelefono(res.getString("telefono"));
                    prestadorVO.setEmail(res.getString("email"));
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }
        return prestadorVO;

    }

    @Override
    public void guardarPrestadorEdit(PrestadorVO prestadorVO) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sql1 = "UPDATE tb_prestador "
                +" SET razon_social=?, id_tipoidentificacion=?, "
                +" numeroidentificacion=?, nit=?, digitoverificacion=?, "
                +" nivel=?, codigohabilitacion=?, id_municipio=?, direccion=?, "
                +" telefono=?, email=?, logo=? "                
                +" WHERE tb_prestador.id=" + prestadorVO.getId();
        
        String sql2 = "UPDATE tb_prestador "
                +" SET razon_social=?, id_tipoidentificacion=?, "
                +" numeroidentificacion=?, nit=?, digitoverificacion=?, "
                +" nivel=?, codigohabilitacion=?, id_municipio=?, direccion=?, "
                +" telefono=?, email=? "                
                +" WHERE tb_prestador.id=" + prestadorVO.getId();
        
       PreparedStatement stmt = null; 
        
       if (!prestadorVO.getLogo().equals("")){
            System.out.println("SQL del Update tb_prestador=" + sql1);
         stmt = conn.prepareStatement(sql1);
         stmt.setString(12, prestadorVO.getLogo());
           
       } else{
             System.out.println("SQL del Update tb_prestador=" + sql2);
              stmt = conn.prepareStatement(sql2);
           
           
       }
        stmt.setString(1, prestadorVO.getRazonSocial());
        stmt.setInt(2, prestadorVO.getIdTipoIdentificacion());
        stmt.setInt(3, prestadorVO.getNumeroIdentificacion());
        stmt.setInt(4, prestadorVO.getNit());
        stmt.setInt(5, prestadorVO.getDigitoVerificacion());
        stmt.setInt(6, prestadorVO.getNivel());
        stmt.setString(7, prestadorVO.getCodigoHabilitacion());
        stmt.setInt(8, prestadorVO.getIdMunicipio());
        stmt.setString(9, prestadorVO.getDireccion());
        stmt.setString(10, prestadorVO.getTelefono());
        stmt.setString(11, prestadorVO.getEmail());  
        
        stmt.execute();
        stmt.close();
    }

    @Override
    public int guardarPrestador(PrestadorVO prestadorVO) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        System.out.println("INSERTAR tb_prestador");

        String sqlAdiciona = "INSERT INTO tb_prestador("
                + "codigo, razon_social, id_tipoidentificacion, "
                +" numeroidentificacion, nit, digitoverificacion, nivel,"
                +" codigohabilitacion, id_municipio, direccion, telefono, email, "
                +" logo) "
                + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?) RETURNING id;";

        PreparedStatement stmt = conn.prepareStatement(sqlAdiciona);

        System.out.println("mirando el prestador: "+prestadorVO.getRazonSocial() );
        stmt.setString(1, prestadorVO.getCodigo());
        stmt.setString(2, prestadorVO.getRazonSocial());
        stmt.setInt(3, prestadorVO.getIdTipoIdentificacion());
        stmt.setInt(4, prestadorVO.getNumeroIdentificacion());
        stmt.setInt(5, prestadorVO.getNit());
        stmt.setInt(6, prestadorVO.getDigitoVerificacion());
        stmt.setInt(7, prestadorVO.getNivel());
        stmt.setString(8, prestadorVO.getCodigoHabilitacion());
        stmt.setInt(9, prestadorVO.getIdMunicipio());
        stmt.setString(10, prestadorVO.getDireccion());
        stmt.setString(11, prestadorVO.getTelefono());
        stmt.setString(12, prestadorVO.getEmail());     
        stmt.setString(13, prestadorVO.getLogo());
        

        ResultSet rs = stmt.executeQuery();
        rs.next();
        int resp = rs.getInt(1);
        System.out.println("Insert Generar: " + sqlAdiciona);

        rs.close();
        stmt.close();
        if (!conn.isClosed()) {
            conn.close();
        }
        return resp;
    }

    @Override
    public int getCantidadPrestador(String $sWhere) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();
        int count = 0;
        String sql = "SELECT count(*) FROM tb_prestador";
        PreparedStatement stmt = conn.prepareStatement(sql);
        try {
            ResultSet res = stmt.executeQuery();
            try {
                if (res.next()) {
                    count = res.getInt(1);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return count;
    }

    @Override
    public List<PrestadorVO> getGPrestadorLista(int displayStart, int displayLength, String $sWhere, String orden) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        List<PrestadorVO> lista = new ArrayList<PrestadorVO>();
        String condicion = "";

        if (!$sWhere.equals("")) {
            //condicion = " WHERE tb_factura.numero LIKE '%"+param+"%' ";
            condicion = $sWhere;
        }

        String sql = "SELECT id, codigo, razon_social, id_tipoidentificacion"
                + " FROM tb_prestador " + condicion + " " + orden + " LIMIT " + displayLength + " OFFSET " + displayStart;
        System.out.println("Sql BUSCAR PRESTADOR LISTA: " + sql);
        PreparedStatement stmt = conn.prepareStatement(sql);

        try {
            ResultSet res = stmt.executeQuery();
            try {
                while (res.next()) {
                    PrestadorVO objVO = new PrestadorVO();
                    objVO.setId(res.getInt("id"));
                    objVO.setCodigo(res.getString("codigo"));
                    objVO.setRazonSocial(res.getString("razon_social"));
                    lista.add(objVO);
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }

        return lista;
    }
}